<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>watch - deep 深度监听</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <p>{{number.a}}</p>
        <!-- 
            watch 默认不开始深度监听
          -->
          <!-- watch 默认是不开始deep监听的 故number里面的值发生改变是不会触发handler函数 -->
        <button @click="number.a++">按钮a++</button>
        <!-- 只有直接给number赋值，watch才能检测到 -->
        <button @click="number = {a:1}">按钮</button>
    </div>
    
</body>
<script type="text/javascript">
    Vue.config.productionTip = false //以阻止 vue 在启动时生成生产提示。
    //创建Vue
    const vm = new Vue({
        el:'#root', 
        data:{
            number:{
                a:10
            }
        },
        watch:{
            number:{
                //这里的deep默认为false 不开启深度监听 只有number重新赋值（第一层发生改变）才能触发
                //将deep:true,触发深度监听，（多层监听），里面的值发生改变也触发handler
                deep:true,//(多层所有属性的变化)
                handler(newVal,oldVal){
                    console.log(newVal,oldVal);
                }
            },
            //监听对象里某一个值的变化（多层结构某个属性的变化）
            'number.a':{
                handler(newVal,oldVal){
                    console.log(newVal,oldVal);
                }
            }

        }
    })

</script>
</html>